<?php

class Solicitudes_Model_DbTable_Historicoprocesos extends Zend_Db_Table_Abstract {
	
	protected $_name = 'historicoprocesos';
	protected $_primary = 'codhistorico';
	protected $_sequence = 'seq_historicoprocesos';
//	protected $_rowClass = 'App_Audit_Row';
	
	public function getEstadoProceso($codproceso){
         $select = $this->select()
                        ->from("historicoprocesos",array("codestado"))
	                    ->where("codproceso=?",$codproceso)
	                    ->order("fecha DESC")
	                    ->limit(1);
	    return $select->query()->fetchColumn(0);
	}
	
	//Select generico para los reportes
	private function _getSelectProcesos() {
	    $columns = array('h.*',
	    				'obtener_estado(h.codproceso) as nombreestado',
                        '(SELECT p.nombreprograma FROM programas p,procesos pc WHERE pc.codproceso=h.codproceso AND p.codprograma=pc.codprograma) as nombreprograma',
                        '(SELECT i.nombrecompleto FROM instituciones i,programas p,procesos pc WHERE pc.codproceso=h.codproceso AND p.codprograma=pc.codprograma AND i.codinstitucion=p.codinstitucion) as nombrecompleto',
                        '(SELECT obtener_ubicacion(p.codubicacion,\'asc\',2,\', \') FROM programas p,procesos pc WHERE pc.codproceso=h.codproceso AND p.codprograma=pc.codprograma) AS ubicacion',
                        '(SELECT hp.fecha FROM historicoprocesos hp WHERE hp.codproceso=h.codproceso AND hp.codestado=\'8\' ORDER BY hp.codhistorico DESC LIMIT 1) as fecha_ae');
	    $select =  $this->select()
	                    ->from(array('h' => 'historicoprocesos'),$columns)
	                    ->where("h.codhistorico = (SELECT hp.codhistorico FROM historicoprocesos hp WHERE hp.codproceso=h.codproceso ORDER BY hp.codhistorico DESC LIMIT 1)")
	                    ->order("h.fecha ASC");
	    return $select;
	}
	
	/*
	 1 PROGRAMAS PENDIENTES DE DESIGNACIÓN PARES => codestado=9
	 6 PROGRAMAS PENDIENTE INFORME DE PARES => codestado=11
	 8 PROGRAMAS CON INFORMES DE EVALUACION EXTERNA EN REVISION DEL CNA => codestado=13
	 8A PROGRAMAS PENDIENTE COMENTARIOS DEL RECTOR => codestado=14
	 9 PROGRAMAS PENDIENTE CONCEPTO CNA => codestado=16
	 10 PROGRAMAS PENDIENTE DE RESOLUCION MINISTERIO DE EDUCACION => codestado=17
	 */
    public function getProcesos($codestado) {
        $select=$this->_getSelectProcesos();
        if(!empty($codestado)){
            $select->where("h.codestado=?",$codestado);
        }
//	    Zend_Debug::dump($select->__toString());
	    $select->setIntegrityCheck(false);
	    return $select->query()->fetchAll();
	}
	
	/*
	 2 PROGRAMAS PENDIENTES ACEPTACIÓN PARES
	 */
    public function getPendientesAceptacionPares() {
        $select=$this->_getSelectProcesos();
        $select->where("h.codestado=?",10);
        $select->where("h.codproceso IN (SELECT pp.codproceso FROM paresproceso pp WHERE pp.subestado=2 AND estadoaceptacionpar=1 AND tipo='P')");
	    //Zend_Debug::dump($select->__toString());
	    $select->setIntegrityCheck(false);
	    return $select->query()->fetchAll();
	}
	
	/*
	 3 PROGRAMAS PENDIENTES CON PARES CONCRETAR VISITA
	 */
    public function getPendientesConParesConcretarVisita() {
        $select=$this->_getSelectProcesos();
        $select->where("h.codestado=?",10);
        $select->where("h.codproceso IN (SELECT pp.codproceso FROM paresproceso pp WHERE pp.subestado=3 AND tipo='P')");
        $select->where("h.codproceso NOT IN (SELECT codproceso FROM solicitudprocesosagenda)");
	    //Zend_Debug::dump($select->__toString());
	    $select->setIntegrityCheck(false);
	    return $select->query()->fetchAll();
	}
	
	/*
	 4 PROGRAMAS CON AGENDA DE VISITA PENDIENTE DE REALIZAR
	 */
    public function getConAgendaDeVisitaPendienteRealizar() {
        $select=$this->_getSelectProcesos();
        $select->where("h.codestado=?",10);
        $select->where("h.codproceso IN (SELECT pp.codproceso FROM paresproceso pp WHERE pp.subestado<=7 AND tipo='P')");
        $select->where("h.codproceso IN (SELECT codproceso FROM solicitudprocesosagenda)");
	    //Zend_Debug::dump($select->__toString());
	    $select->setIntegrityCheck(false);
	    return $select->query()->fetchAll();
	}
	
	/*
	 5 PROGRAMAS CON CAMBIO EN AGENDA DE VISITA
	 */
    public function getConCambioAgendaDeVisita() {
        $select=$this->_getSelectProcesos();
        $select->where("h.codestado=?",10);
        $select->where("h.codproceso IN (SELECT sa.codproceso FROM solicitudprocesosagenda sa,agendas a WHERE sa.codagenda=a.codagenda AND estado='AP')");
	    //Zend_Debug::dump($select->__toString());
	    $select->setIntegrityCheck(false);
	    return $select->query()->fetchAll();
	}
	
	/*
	 7 PROGRAMAS PENDIENTE INFORME DE PARES AJUSTADO
	 */
    public function getPendienteInformeParesAjustado() {
        $select=$this->_getSelectProcesos();
        $select->where("h.codestado=?",11);
        $select->where("(SELECT count(*) FROM historicoprocesos hp WHERE hp.codproceso=h.codproceso AND hp.codestado=12)>0");
	    //Zend_Debug::dump($select->__toString());
	    $select->setIntegrityCheck(false);
	    return $select->query()->fetchAll();
	}
	
	public function getHistoricoProceso($codproceso) {
	    $columns = array('h.*',
//	                    'obtener_estado(h.codproceso) as estadoactual',
	    				'(SELECT nombre FROM estadosprocesos e WHERE e.codestado=h.codestado) as nombreestado',
                        '(SELECT nombreusuario FROM usuarios u WHERE u.codusuario=h.codusuario) as nombreusuario');
	    $select =  $this->select()
	                    ->from(array('h' => 'historicoprocesos'),$columns)
	                    ->join(array("p"=>"procesos"),"p.codproceso=h.codproceso",array("codprograma","codestado AS estadoactual"))
	                    ->where("h.codproceso=?",$codproceso)
	                    ->order("codhistorico DESC");
	    $select->setIntegrityCheck(false);
//	    Zend_Debug::dump($select->__toString());
	    return $select->query()->fetchAll();
	}
}//fin de la clase

